<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- [js] 深度克隆对象的方法有哪些，并把你认为最好的写出来 -->
    
</body>
<script>

  // [js] 写出几种创建对象的方式，并说说他们的区别是什么

  // new Object()
  // 直接通过构造函数创建一个新对象
  // 使用字面量的方式更简单，其实他俩是一样的。
  // 优点是足够简单，缺点是每个对象都是独立的

  // 工厂模式
  function createObj(name,age){
    var obj = {};
    obj.name=name;
    obj.age=age;
    return obj
}
var Anson = createObj('Anson', 18)
console.log(Anson)
//{name: "Anson", age: 18}
// 优点是 可以解决创建多个相似对象的问题，缺点是 无法识别对象的类型。

// 构造函数

function Person(name,age){
    this.name =name;
    this.age=age;
    this.sayName =function (){ alert(this.name) }
}
var person = new Person('小明',13);
console.log(person);
//Person {name: "小明", age: 13, sayName: ƒ}

// （构造函数+原型）组合模式

function Person(name, age){
    this.name = name;
    this.age = age;
    Person.prototype.sayName = function (){ alert(this.name) }
 }
var person = new Person('小白',18)
console.log(person);
//Person {name: "小白", age: 18} __proto__ -> sayName: ƒ ()
</script>
</html>